home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 42 / Amiga Format AFCD42 (Issue 126, Aug 1999).iso / -serious- / programming / other / wild / support / wilf / firsttry / startup.c < prev    next >
C/C++ Source or Header  |  1999-05-25  |  2KB  |  92 lines

  1. /*
  2. **    My Startup File...
  3. */
  4.  
  5. #include <exec/exec.h>
  6. #include <inline/exec.h>
  7. #include <intuition/intuition.h>
  8. #include <graphics/gfxbase.h>
  9. #include <dos/dosextens.h>
  10. #include <workbench/startup.h>
  11. #include <exec/libraries.h>
  12.  
  13. struct ExecBase *SysBase;
  14. struct IntuitionBase *IntuitionBase;
  15. struct GraphicsBase *GraphicsBase;
  16. struct DOSBase *DOSBase;
  17. struct Library *IffParseBase;
  18. struct Process *ThisTask;
  19. struct WBStartup *WBMessage=NULL;
  20.  
  21. static void shutup(void);
  22. static void closelibs(void);
  23. static int openlibs(void);
  24. extern int main(char *commandline);
  25. extern void _exit(int err);
  26.  
  27. // This is just to call the program's main. Must do nothing.
  28. void starter(char *commandline)    
  29. {
  30.   exit(main(commandline));
  31. }
  32.  
  33. // This is to exit anytime from the program. Calls shutup and exits.
  34. // No stack problems, entry.o handles it.
  35. void exit(int err)            
  36. {
  37.   shutup(); 
  38.   _exit(err);
  39. }
  40.  
  41. // This is called by main() at start, is the startup init.Openlibs,WBMessage,...
  42. int __main(void)
  43. {
  44.   struct MsgPort *taskport;
  45.   if (!(openlibs()))
  46.    exit(-1);
  47.   ThisTask=(struct Process *)FindTask(NULL);
  48.   if (!ThisTask->pr_CLI)
  49.    {
  50.    taskport=&ThisTask->pr_MsgPort;
  51.    WaitPort(taskport);
  52.    WBMessage=(struct WBStartup *)GetMsg(taskport);   
  53.    } 
  54. }
  55.  
  56. // This frees, closes everything opened or allocated in __main.
  57. static void shutup(void)
  58. {
  59.   closelibs();
  60.   if (WBMessage)
  61.    ReplyMsg((struct Message *)WBMessage);
  62. }
  63.  
  64. #define OpenLib(base,name,ver) \
  65.  if (!(base=OpenLibrary(name,ver))) \
  66.   {return(FALSE);} 
  67.  
  68. static int openlibs(void)
  69. {
  70.   SysBase=*(struct ExecBase **)4l;
  71.   
  72.   OpenLib(IntuitionBase,"intuition.library",37);
  73.   OpenLib(GraphicsBase,"graphics.library",37);
  74.   OpenLib(IffParseBase,"iffparse.library",37);
  75.   OpenLib(DOSBase,"dos.library",37);
  76.  
  77. }
  78.  
  79. #define CloseLib(base) \
  80.  if (base) \
  81.   {CloseLibrary(base); \
  82.    base=NULL;}
  83.    
  84. static void closelibs(void)
  85. {
  86.   CloseLib(IntuitionBase);
  87.   CloseLib(GraphicsBase);
  88.   CloseLib(IffParseBase);
  89.   CloseLib(DOSBase);
  90. }
  91.  
  92.